import axios from "axios";
import router from "@/router";

import { storeToRefs } from "pinia";
import { useUserStore } from "@/stores/user.js"


axios.defaults.baseURL = 'http://localhost:3000/api/';  // 移动端
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';


axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么  => 携带token/自定义数据

    let User = useUserStore();
    let {token} = storeToRefs(User);
    if(token.value){
        config.headers.token = token.value;
    }

    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });


// 响应拦截  => axios请求的响应部分 在被then和catch接受处理前拦截它们。
// 添加响应拦截器
// axios.interceptors.response.use(function (response) {
//     // 2xx 范围内的状态码都会触发该函数。 (status == 200  => 请求成功,后端返回结果)
//     // 对响应数据做点什么

//     console.log("响应被拦截",response);

//     return response.data; // status == 200 => 直接返回response.data接口返回的数据)
// }, function (error) {
//     // 超出 2xx 范围的状态码都会触发该函数。 (status == 100 300 400 500)
//     // 对响应错误做点什么
//     return Promise.reject(error);
// });

// status  请求的状态码,请求的结果
// status == 100 300 400 500  请求失败
// status == 200  请求成功,后端返回数据 (包含着增删改查的信息 code)  

// code   请求成功,对于的操作结果 前端向后端发送请求(实现数据的增删改查  => code 此过程中伴随的各种请求)
// code == 200 操作成功  => 登录成功/删除成功/修改成功/新增成功/查询成功
// code == 10003 操作失败 => 登录时密码有误
// code == 10005 操作失败 => token已经过期 => 需要重新登录

axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。 (status == 200  => 请求成功,后端返回数据 (包含着增删改查的信息 code))
    // 对响应数据做点什么
    

    // console.log("响应接收前被拦截",response);
    // console.log("router",router);

    var result = response.data;  // status == 200 => 直接返回response.data接口返回的响应数据( {code: 200/10003/10005})
    // code == 200 操作成功  => 登录成功/删除成功/修改成功/新增成功/查询成功
    // code == 10003 操作失败 => 登录是密码有误
    // code == 10005 操作失败 => token已经过期 => 需要重新登录

    var {code,message} = result;
    if(code == 200){ // status == 200(服务器返回响应) && code == '200'  操作成功的
        return result;    // 操作成功  原封不动返回数据
    }else if(code == 10003){ // status == 200(服务器返回响应) && code == '200'  操作成功的
        let err = new Error(message);
        return Promise.reject(err);  // 统一被catch处理
    }else if(code == 10119){ // token已经过期  => 去登录

        // 引入router实例
        // 1. router.push 通过路由实例进行跳转
        // 2. router.currentRoute  获取当前路由信息

        // store.dispatch("exitAndUpdateAuthorityInfo");  // 清除vuex上的数据
        // router.push({  // 去登录
        //     path:"/login",
        //     query:{
        //         ReturnUrl:router.currentRoute.fullPath,
        //     }
        // })

        let err = new Error(message);  // token已经过期
        return Promise.reject(err);  // 统一被catch处理
    }else { // token已经过期  => 去登录
        let err = new Error(message);  // token已经过期
        return Promise.reject(err);  // 统一被catch处理
    }


    
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。 (status == 100 300 400 500)
    // 对响应错误做点什么
    return Promise.reject(error);
});

export default axios;